<!DOCTYPE html>
<html>
  <head><meta name="generator" content="Hexo 3.9.0">
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=yes">
  
  
  <title>  XHX Blog </title>

 
  
    <link rel="icon" href="/images/avatar.jpg">
  


  <link rel="stylesheet" href="/nayo.min.css"> 
</head>  
  <body>   
    
      <header class="header-wrapper">

  <nav class="inner">
    <div class="title">
      <a href="/">
        <img class="logo" src="/images/avatar.jpg">
      </a>
    </div>

    <ul class="menu">
      
      
      <li class="item">
        <a class="link" id="menu-home" href="/">
          <i class="iconfont icon-home">
        </i></a>
      </li>
      
      
      
      <li class="item">
        <a class="link" id="menu-archives" href="/archives">
          <i class="iconfont icon-archives">
        </i></a>
      </li>
      
      
      
      <li class="item">
        <a class="link" id="menu-tags" href="/tags">
          <i class="iconfont icon-tags">
        </i></a>
      </li>
      
      
      
      <li class="item">
        <a class="link" id="menu-about" href="/about">
          <i class="iconfont icon-about">
        </i></a>
      </li>
      
      
      
      <li class="item">
        <a class="link" id="menu-search">
          <i class="iconfont icon-search">
        </i></a>
        

        
      
    </li></ul>
  </nav>
</header>

<header class="mobile-header-wrapper">
  <i id="mobile-toggle" class="iconfont icon-menu mobile-toggle"></i>
</header>   

      <div class="container">       
          
          
            <div class="container-inner">  
          

          


<div class="index slideDownMin">
	

	<div class="profile">

		<img class="avatar" src="/images/avatar.jpg">

		<p class="author">Xiao Haoxing</p>

		<div class="social">
			
			
			<a target="_blank" class="links" href="https://github.com/xiaohaoxing/">
				<i class="iconfont icon-Github">
			</i></a>
			
			
			<a target="_blank" class="links" href="https://www.weibo.com/u/1867341073/home">
				<i class="iconfont icon-Weibo">
			</i></a>
			
			
			<a target="_blank" class="links" href="https://www.zhihu.com/people/xiao-haoxing/activities">
				<i class="iconfont icon-Zhihu">
			</i></a>
			
			
			<a target="_blank" class="links" href="https://music.163.com/#/user/home?id=77638723">
				<i class="iconfont icon-Neteasemusic">
			</i></a>
			
			
		</div>
	</div>


	

	
	
	

<article class="article">		
	   
	<div class="article-header">
	    
		<a class="title" href="/2020/05/15/如何实现复制Excel内容更新数据/">如何实现复制Excel内容更新数据</a>  
	       
		 

		<div class="meta">
			<time>May 15, 2020</time>			
		</div>
	</div>


	

    
	<div class="typo article-excerpt">	
		
			<h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><p>&emsp;&emsp;上季度在迭代通用策略的时候，曾经尝试迁移 PHP 版本的策略数据上传功能到 Java 后台，最后结果是配置管理部分的都完成了迁移（技术难度较低），但是相对而言，修改下载下来的 Excel 数据，然后复制内容到文本域里实现上传更新的功能就复杂的多，在上次的迁移中以失败告终，没有顺利迁移过来。</p>
<p>&emsp;&emsp;这个季度需要做的需求”智能调拨“也有类似的技术点：需要实现智能调拨方案的下载数据和修改数据，然后上传覆盖更新，还需要记录更新日志。不一样的业务场景，相似的技术点，不过最大的不同在于：这次的方案全盘由我自己来决策，需要什么字段自己加，需要执行什么操作自己构思；自由发挥的空间很大。因此心中就决心这次一定要把这个功能做好。</p>
<p><strong>策略更新的信息</strong><br><img src="/images/%E7%AD%96%E7%95%A5%E6%9B%B4%E6%96%B0.png" alt="策略更新表"></p>
		  	  
	</div>



	<div class="article-categories">
	 
	</div>
	

	<div class="article-tags">
		
			<i class="iconfont icon-tags" style="margin-right:4px"></i>
			            
				<a class="link" href="/tags/Java/">Java</a>           
			            
				<a class="link" href="/tags/技术方案/">技术方案</a>           
			
		
	</div>

	<div class="article-bottom">
		<a class="readmore" href="/2020/05/15/如何实现复制Excel内容更新数据/">Continue</a> 	
	</div>	
    
</article>

	
	
	
	

<article class="article">		
	   
	<div class="article-header">
	    
		<a class="title" href="/2020/04/30/学以致用/">学以致用</a>  
	       
		 

		<div class="meta">
			<time>Apr 30, 2020</time>			
		</div>
	</div>


	

    
	<div class="typo article-excerpt">	
		
			<h2 id="刷题经历"><a href="#刷题经历" class="headerlink" title="刷题经历"></a>刷题经历</h2><p>&emsp;&emsp;最近一直在刷 Leetcode，刚好遇到一个 <a href="https://leetcode.com/problems/reformat-department-table/" target="_blank" rel="noopener">SQL 的题</a>涉及到没有学习过的知识点。该题描述如下：</p>
<blockquote>
<p>给定一个数据表 <code>Department</code>，数据格式如下：</p>
</blockquote>
<table>
<thead>
<tr>
<th>id</th>
<th>revenue</th>
<th>month</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>8000</td>
<td>Jan</td>
</tr>
<tr>
<td>2</td>
<td>9000</td>
<td>Jan</td>
</tr>
<tr>
<td>3</td>
<td>10000</td>
<td>Feb</td>
</tr>
<tr>
<td>1</td>
<td>7000</td>
<td>Feb</td>
</tr>
<tr>
<td>1</td>
<td>6000</td>
<td>Mar</td>
</tr>
</tbody></table>
<blockquote>
<p>要求返回的格式是上述数据的按 <code>id</code> 和 <code>month</code> 进行聚合，但是列同时还是按月进行切分的。也就是说，行方向是根据 id 区分的，列方向是根据 month 区分的，如下表：</p>
</blockquote>
<table>
<thead>
<tr>
<th>id</th>
<th>Jan_Revenue</th>
<th>Feb_Revenue</th>
<th>Mar_Revenue</th>
<th>…</th>
<th>Dec_Revenue</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>8000</td>
<td>7000</td>
<td>6000</td>
<td>…</td>
<td>null</td>
</tr>
<tr>
<td>2</td>
<td>9000</td>
<td>null</td>
<td>null</td>
<td>…</td>
<td>null</td>
</tr>
<tr>
<td>3</td>
<td>null</td>
<td>10000</td>
<td>null</td>
<td>…</td>
<td>null</td>
</tr>
<tr>
<td>
		  	  
	</td></tr></tbody></table></div>



	<div class="article-categories">
	 
	</div>
	

	<div class="article-tags">
		
			<i class="iconfont icon-tags" style="margin-right:4px"></i>
			            
				<a class="link" href="/tags/leetcode/">leetcode</a>           
			
		
	</div>

	<div class="article-bottom">
		<a class="readmore" href="/2020/04/30/学以致用/">Continue</a> 	
	</div>	
    
</article>

	
	
	
	

<article class="article">		
	   
	<div class="article-header">
	    
		<a class="title" href="/2020/01/06/创建hexo脚本/">创建hexo脚本</a>  
	       
		 

		<div class="meta">
			<time>Jan 06, 2020</time>			
		</div>
	</div>


	

    
	<div class="typo article-excerpt">	
		
			<h1 id="起因"><a href="#起因" class="headerlink" title="起因"></a>起因</h1><p>本人创建<code>Hexo</code>脚本的痛点主要是2点：</p>
<ol>
<li>我用 vs code 的终端运行 hexo 命令和管理资源文件，用 Typora 撰写文章，因此每次不管是新建文章还是预览还是发布都需要来回切换，步骤较多挺麻烦的。</li>
<li>博客源码的版本管理。之前写过好几篇博文，可是在一次装机的过程中忘记迁移，结果丢失了原始markdown的文章和配置文件，导致无法继续写下去了，只得重头开始!<code>QAQ</code></li>
</ol>
		  	  
	</div>



	<div class="article-categories">
	 
	</div>
	

	<div class="article-tags">
		
			<i class="iconfont icon-tags" style="margin-right:4px"></i>
			            
				<a class="link" href="/tags/hexo/">hexo</a>           
			            
				<a class="link" href="/tags/productivity/">productivity</a>           
			
		
	</div>

	<div class="article-bottom">
		<a class="readmore" href="/2020/01/06/创建hexo脚本/">Continue</a> 	
	</div>	
    
</article>

	
	
	
	

<article class="article">		
	   
	<div class="article-header">
	    
		<a class="title" href="/2020/01/05/规则配置平台/">规则配置平台</a>  
	       
		 

		<div class="meta">
			<time>Jan 05, 2020</time>			
		</div>
	</div>


	

    
	<div class="typo article-excerpt">	
		
			<h3 id="1-业务背景"><a href="#1-业务背景" class="headerlink" title="1 业务背景"></a>1 业务背景</h3><h4 id="1-1-是什么样的业务场景"><a href="#1-1-是什么样的业务场景" class="headerlink" title="1.1 是什么样的业务场景"></a>1.1 是什么样的业务场景</h4><p>  当前业务场景中存在这样的一种较为特殊的需求：订单流的处理过程中，包括了一些决策的节点。如：拆单、合单、分快递等。这些场景存在共同点：</p>
<ol>
<li><p>规则数量相对多，用单纯的分支代码逻辑实现起来麻烦且不优雅</p>
</li>
<li><p>规则随时可能会调整，如果用硬编码实现则调整周期长，不能满足业务场景的要求；此外，硬编码导致每次调整都需要开发的支持，加重了开发的负担。</p>
</li>
<li><p>规则的输入输出相对固定：输入一些字段的值，输出一些固定值的结果。不用的场景适合用同一套系统去维护。</p>
<p>此前 PHP 版本的系统中实现了一套较为简单的规则配置系统，但是其不管是输入还是输出，都是直接丢给用户一个输入框直接输入全文，用户面对这样的一个空白页面其实根本不知道填写什么。<br>因此，这版的 Java 新系统需求是需要实现一个更易用、拓展性更强的一个规则配置中心。暂时给的场景是规则数量较少的合单规则——当前仅有3条明确的合单规则，需要先将这些规则正确配置到系统中。</p>
		  	  
	</li></ol></div>



	<div class="article-categories">
	 
	</div>
	

	<div class="article-tags">
		
			<i class="iconfont icon-tags" style="margin-right:4px"></i>
			            
				<a class="link" href="/tags/drools/">drools</a>           
			            
				<a class="link" href="/tags/java/">java</a>           
			
		
	</div>

	<div class="article-bottom">
		<a class="readmore" href="/2020/01/05/规则配置平台/">Continue</a> 	
	</div>	
    
</article>

	
	
	
	

<article class="article">		
	   
	<div class="article-header">
	    
		<a class="title" href="/2019/11/26/通用策略文档/">通用策略文档</a>  
	       
		 

		<div class="meta">
			<time>Nov 26, 2019</time>			
		</div>
	</div>


	

    
	<div class="typo article-excerpt">	
		 
			<h2 id="项目背景"><a href="#项目背景" class="headerlink" title="项目背景"></a>项目背景</h2><p>场景是根据一些条件去查询指定的结果，场景较多，如果每个场景都维护一套对应的库表和数据结构，成本过高而且不通用，这里用通用策略去配置，实现的效果是传入指定的策略code和条件数据可以得到对应的查询结果。<br>  在很多场景下，我们需要根据一些条件去查询结果，</p>
<h2 id="项目地址"><a href="#项目地址" class="headerlink" title="项目地址"></a>项目地址</h2><table>
<thead>
<tr>
<th></th>
<th>前端地址</th>
<th>管理地址</th>
</tr>
</thead>
<tbody><tr>
<td>测试环境</td>
<td><a href="http://wl.be.test.mi.com/oms" target="_blank" rel="noopener">http://wl.be.test.mi.com/oms</a></td>
<td><a href="http://wl.be.test.mi.com/oms/#/admin/common-strategy" target="_blank" rel="noopener">http://wl.be.test.mi.com/oms/#/admin/common-strategy</a></td>
</tr>
<tr>
<td>线上环境</td>
<td><a href="http://wl.be.mi.com/oms" target="_blank" rel="noopener">http://wl.be.mi.com/oms</a></td>
<td><a href="http://wl.be.mi.com/oms/#/admin/common-strategy" target="_blank" rel="noopener">http://wl.be.mi.com/oms/#/admin/common-strategy</a></td>
</tr>
<tr>
<td>* 如遇无法登陆请在工作台(<a href="http://wl.be.test.mi.com/work/" target="_blank" rel="noopener">测试</a>/<a href="http://wl.be.mi.com/work/" target="_blank" rel="noopener">线上</a>)添加系统权限。</td>
<td></td>
<td></td>
</tr>
</tbody></table>
<h2 id="使用指南"><a href="#使用指南" class="headerlink" title="使用指南"></a>使用指南</h2><h3 id="1-创建策略集"><a href="#1-创建策略集" class="headerlink" title="1. 创建策略集"></a>1. 创建策略集</h3><h3 id="2-定义策略集字段"><a href="#2-定义策略集字段" class="headerlink" title="2. 定义策略集字段"></a>2. 定义策略集字段</h3><h3 id="3-创建策略"><a href="#3-创建策略" class="headerlink" title="3. 创建策略"></a>3. 创建策略</h3><h3 id="4-选择策略字段"><a href="#4-选择策略字段" class="headerlink" title="4. 选择策略字段"></a>4. 选择策略字段</h3><h3 id="5-下载策略和基础数据"><a href="#5-下载策略和基础数据" class="headerlink" title="5. 下载策略和基础数据"></a>5. 下载策略和基础数据</h3><h3 id="6-填写好策略数据，并导入"><a href="#6-填写好策略数据，并导入" class="headerlink" title="6. 填写好策略数据，并导入"></a>6. 填写好策略数据，并导入</h3><h3 id="7-定义该策略的匹配规则"><a href="#7-定义该策略的匹配规则" class="headerlink" title="7. 定义该策略的匹配规则"></a>7. 定义该策略的匹配规则</h3><h3 id="8-通过系统第三方X5接口查询策略数据"><a href="#8-通过系统第三方X5接口查询策略数据" class="headerlink" title="8. 通过系统第三方X5接口查询策略数据"></a>8. 通过系统第三方X5接口查询策略数据</h3>
		  	  
	</div>



	<div class="article-categories">
	 
	</div>
	

	<div class="article-tags">
		
			<i class="iconfont icon-tags" style="margin-right:4px"></i>
			            
				<a class="link" href="/tags/mi/">mi</a>           
			
		
	</div>

	<div class="article-bottom">
		<a class="readmore" href="/2019/11/26/通用策略文档/">Continue</a> 	
	</div>	
    
</article>

	
	

	
	

	

    <script type="text/x-mathjax-config">
        var post = document.getElementsByClassName("post")[0];  
        MathJax.Hub.Config({
            showProcessingMessages: false,
            messageStyle: "none",    
            tex2jax: {
                inlineMath:  [ ["$", "$"] , ["\\(","\\)"]],
                displayMath: [ ["$$","$$"] , ["\\[","\\]"]],
                skipTags: ['script', 'noscript', 'style', 'textarea', 'pre','code','a'],
            },
            "HTML-CSS": {            
                showMathMenu: false
            }
        });
        MathJax.Hub.Queue(["Typeset",MathJax.Hub,post]);
    </script>
    <style>.MathJax{outline:0;}</style>

    <script type="text/javascript" src="//cdn.bootcss.com/mathjax/2.7.2/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
 
</div>
          </div> 
      </div>            
    
        <i id="toTop" class="iconfont icon-backtotop"></i>

  
    <div class="none" id="search">
    <div class="header">
        <input type="text" placeholder="Typing Something here." id="search-input" class="input">
        
        <i id="search-cancel" class="iconfont icon-cancel"></i>
    </div>

    <div id="search-result" class="result"></div>
</div>
     <div class="mobile-menu">      

      
      <img class="mobile-menu-icon" src="/images/avatar.jpg">  
      

         
            

            <a class="mobile-menu-link" href="/">Home
            </a>
            
         
            

            <a class="mobile-menu-link" href="/archives">Archives
            </a>
            
         
            

            <a class="mobile-menu-link" href="/tags">Tags
            </a>
            
         
            

            <a class="mobile-menu-link" href="/about">About
            </a>
            
         
                          

            <a class="mobile-menu-link mobile-menu-search" href="#">Search </a>                 
            
         
      
</div>
        
    



     
    


<footer class="footer">
	<div class="inner">
		<div class="copyright">
			&copy;
			
			2019 -
			
			2020
			Lemon

			<br>
			By <a href="https://hexo.io" target="_blank">Hexo</a> Theme <a href="https://github.com/Lemonreds/hexo-theme-Nayo" target="_blank">Nayo</a>
		</div>
	</div>
</footer>   

    <script src="/nayo.bundle.js"></script>           
  </body>        
</html>